#ifndef Singleton_h
#define Singleton_h

template <class T>
class Singleton {
    Singleton(){};
    Singleton(const Singleton &){}//拷贝构造函数，例如有一个函数参数是Singleton，则会调用这个方法
    Singleton& operator=(const Singleton &){}
    static T *instance;
public:
    static T *getInstance();
};


template <class T>
T *Singleton<T>::instance = NULL; //静态变量需要初始化，这里初始化为空

template <class T>
T *Singleton<T>::getInstance()
{
    if(Singleton<T>::instance == NULL )
    {
        Singleton<T>::instance = new T();
    }
    return Singleton<T>::instance;
}

#endif /* Singleton_h */